"""初始化权限数据的管理命令"""
from django.core.management.base import BaseCommand
from django.contrib.auth.models import User
from apps.permissions.models import Permission, Role, RolePermission


class Command(BaseCommand):
    help = '初始化权限和角色数据'

    def handle(self, *args, **options):
        self.stdout.write('开始初始化权限数据...')
        
        # 创建基础权限
        permissions_data = [
            # 用户管理权限
            {'name': 'users:view', 'display_name': '查看用户', 'module': 'users', 'permission_type': 'menu'},
            {'name': 'users:list', 'display_name': '用户列表', 'module': 'users', 'permission_type': 'action'},
            {'name': 'users:create', 'display_name': '创建用户', 'module': 'users', 'permission_type': 'action'},
            {'name': 'users:update', 'display_name': '更新用户', 'module': 'users', 'permission_type': 'action'},
            {'name': 'users:delete', 'display_name': '删除用户', 'module': 'users', 'permission_type': 'action'},
            {'name': 'users:toggle_status', 'display_name': '切换用户状态', 'module': 'users', 'permission_type': 'action'},
            
            # 权限管理权限
            {'name': 'permissions:view', 'display_name': '查看权限管理', 'module': 'permissions', 'permission_type': 'menu'},
            {'name': 'permissions:list', 'display_name': '权限列表', 'module': 'permissions', 'permission_type': 'action'},
            {'name': 'permissions:create', 'display_name': '创建权限', 'module': 'permissions', 'permission_type': 'action'},
            {'name': 'permissions:update', 'display_name': '更新权限', 'module': 'permissions', 'permission_type': 'action'},
            {'name': 'permissions:delete', 'display_name': '删除权限', 'module': 'permissions', 'permission_type': 'action'},
            
            # 角色管理权限
            {'name': 'roles:view', 'display_name': '查看角色管理', 'module': 'roles', 'permission_type': 'menu'},
            {'name': 'roles:list', 'display_name': '角色列表', 'module': 'roles', 'permission_type': 'action'},
            {'name': 'roles:create', 'display_name': '创建角色', 'module': 'roles', 'permission_type': 'action'},
            {'name': 'roles:update', 'display_name': '更新角色', 'module': 'roles', 'permission_type': 'action'},
            {'name': 'roles:delete', 'display_name': '删除角色', 'module': 'roles', 'permission_type': 'action'},
            {'name': 'roles:assign_permissions', 'display_name': '分配权限', 'module': 'roles', 'permission_type': 'action'},
            {'name': 'roles:assign_users', 'display_name': '分配用户', 'module': 'roles', 'permission_type': 'action'},
            
            # 系统管理权限
            {'name': 'system:admin', 'display_name': '系统管理', 'module': 'system', 'permission_type': 'menu'},
            {'name': 'system:settings', 'display_name': '系统设置', 'module': 'system', 'permission_type': 'action'},
        ]
        
        created_permissions = []
        for perm_data in permissions_data:
            permission, created = Permission.objects.get_or_create(
                name=perm_data['name'],
                defaults={
                    'display_name': perm_data['display_name'],
                    'module': perm_data['module'],
                    'permission_type': perm_data['permission_type'],
                    'is_system': True
                }
            )
            if created:
                created_permissions.append(permission)
                self.stdout.write(f'创建权限: {permission.display_name}')
        
        # 创建基础角色
        roles_data = [
            {
                'name': 'admin',
                'display_name': '系统管理员',
                'description': '拥有所有权限的系统管理员',
                'is_system': True,
                'permissions': [p.name for p in Permission.objects.all()]
            },
            {
                'name': 'user_manager',
                'display_name': '用户管理员',
                'description': '负责用户管理的管理员',
                'is_system': True,
                'permissions': [
                    'users:view', 'users:list', 'users:create', 'users:update', 'users:toggle_status'
                ]
            },
            {
                'name': 'viewer',
                'display_name': '查看者',
                'description': '只能查看信息的用户',
                'is_system': True,
                'permissions': ['users:view', 'users:list']
            }
        ]
        
        for role_data in roles_data:
            role, created = Role.objects.get_or_create(
                name=role_data['name'],
                defaults={
                    'display_name': role_data['display_name'],
                    'description': role_data['description'],
                    'is_system': role_data['is_system']
                }
            )
            
            if created:
                self.stdout.write(f'创建角色: {role.display_name}')
                
                # 分配权限给角色
                for perm_name in role_data['permissions']:
                    try:
                        permission = Permission.objects.get(name=perm_name)
                        RolePermission.objects.get_or_create(
                            role=role,
                            permission=permission
                        )
                    except Permission.DoesNotExist:
                        self.stdout.write(f'权限不存在: {perm_name}')
        
        self.stdout.write(self.style.SUCCESS('权限数据初始化完成！'))
        self.stdout.write(f'创建了 {len(created_permissions)} 个权限')
        self.stdout.write(f'创建了 {len(roles_data)} 个角色')
